Hello,
I have this following constraint in my Minizinc model:
constraint forall(s in index_set(shiftVars) where shiftVars[s].numD > 0) (
forall(d in 0..shiftVars[s].numD-1)(
if ( d<shiftVars[s].numD /\ d>=0 /\ occurs(shiftVars[s].walk[d].start) ) then (
shiftVars[s].walk[d].duration == shiftVars[s].drive[d].start - shiftVars[s].walk[d].start) endif
));
As you can see, there are some unnecessary parts in it. Now, I wanted to remove for example d<shiftVars[s].numD, as it has no practical use. (d is looped until shiftVars[s].numD-1, so it will never be bigger than shiftVars[s].numD and the result is always true.)
However, as soon as I remove it, the runtime for the chuffed solver rises a lot (14 seconds vs.
1 min 24 seconds), and the number of nodes rises from 31607 to 39015. I always used the same seed.
This seems really counterintuitive
to me. Why does this happen?